/**
 * 应用相关的 IPC 处理模块
 */
import { ipcMain, app, shell, dialog } from 'electron'
import { getMainWindow } from '../utils/windowManager'
// import path from 'path'
import os from 'os'

/**
 * 设置应用相关的 IPC 处理程序
 */
export function setupAppIPC(): void {
  console.log('设置应用 IPC 处理程序')

  // 获取应用信息
  ipcMain.handle('get-app-info', () => {
    return {
      version: app.getVersion(),
      name: app.getName(),
      appPath: app.getAppPath(),
      locale: app.getLocale(),
      isPackaged: app.isPackaged,
      platform: process.platform,
      arch: process.arch,
      osVersion: os.release(),
      osName: os.type()
    }
  })

  // 退出应用
  ipcMain.on('quit-app', () => {
    console.log('退出应用')
    app.quit()
  })

  // 重启应用
  ipcMain.on('restart-app', () => {
    console.log('重启应用')
    app.relaunch()
    app.exit(0)
  })

  // 打开外部链接
  ipcMain.handle('open-external-link', async (_event, url: string) => {
    console.log('打开外部链接:', url)
    try {
      await shell.openExternal(url)
      return { success: true }
    } catch (error: any) {
      console.error('打开外部链接失败:', error)
      return { success: false, error: error.message }
    }
  })

  // 打开文件选择对话框
  ipcMain.handle('show-open-dialog', async (_event, options: Electron.OpenDialogOptions) => {
    console.log('打开文件选择对话框')
    try {
      const result = await dialog.showOpenDialog(options)
      return result
    } catch (error: any) {
      console.error('打开文件选择对话框失败:', error)
      return { canceled: true, error: error.message }
    }
  })

  // 打开保存文件对话框
  ipcMain.handle('show-save-dialog', async (_event, options: Electron.SaveDialogOptions) => {
    console.log('打开保存文件对话框')
    try {
      const result = await dialog.showSaveDialog(options)
      return result
    } catch (error: any) {
      console.error('打开保存文件对话框失败:', error)
      return { canceled: true, error: error.message }
    }
  })

  // 显示消息对话框
  ipcMain.handle('show-message-box', async (_event, options: Electron.MessageBoxOptions) => {
    console.log('显示消息对话框')
    try {
      const mainWindow = getMainWindow()
      if (!mainWindow) {
        return { response: -1, error: '主窗口不可用' }
      }
      const result = await dialog.showMessageBox(mainWindow, options)
      return result
    } catch (error: any) {
      console.error('显示消息对话框失败:', error)
      return { response: -1, error: error.message }
    }
  })
} 